/**
 * API接口统一管理
 * 基于uni-app的网络请求封装
 */

// API基础配置
const API_BASE_URL = 'http://localhost:8080/api'

/**
 * 统一请求封装
 * @param {Object} options 请求配置
 * @returns {Promise} 请求结果
 */
function request(options) {
  return new Promise((resolve, reject) => {
    // 显示加载提示
    if (options.showLoading !== false) {
      uni.showLoading({
        title: '加载中...'
      })
    }
    
    uni.request({
      url: API_BASE_URL + options.url,
      method: options.method || 'GET',
      data: options.data || {},
      header: {
        'Content-Type': 'application/json',
        ...options.header
      },
      success: (res) => {
        // 隐藏加载提示
        if (options.showLoading !== false) {
          uni.hideLoading()
        }
        
        // 统一处理响应
        if (res.statusCode === 200) {
          const { code, data, message } = res.data
          
          if (code === 200) {
            resolve(data)
          } else {
            // 业务错误处理
            const errorMsg = message || '请求失败'
            if (options.showError !== false) {
              uni.showToast({
                title: errorMsg,
                icon: 'none',
                duration: 2000
              })
            }
            reject(new Error(errorMsg))
          }
        } else {
          // HTTP错误处理
          const errorMsg = `请求失败: ${res.statusCode}`
          if (options.showError !== false) {
            uni.showToast({
              title: errorMsg,
              icon: 'none',
              duration: 2000
            })
          }
          reject(new Error(errorMsg))
        }
      },
      fail: (err) => {
        // 隐藏加载提示
        if (options.showLoading !== false) {
          uni.hideLoading()
        }
        
        // 网络错误处理
        const errorMsg = '网络连接失败，请检查网络设置'
        if (options.showError !== false) {
          uni.showToast({
            title: errorMsg,
            icon: 'none',
            duration: 2000
          })
        }
        reject(err)
      }
    })
  })
}

/**
 * 商品相关API
 */
export const productApi = {
  /**
   * 获取商品列表
   * @param {Object} params 查询参数
   * @param {number} params.page 页码（从0开始）
   * @param {number} params.size 每页大小
   * @param {string} params.sortType 排序类型：sales-销量，price_asc-价格升序，price_desc-价格降序，time-时间
   * @returns {Promise} 商品列表数据
   */
  getProductList(params = {}) {
    const { page = 0, size = 10, sortType = 'time' } = params
    return request({
      url: '/product/list',
      method: 'GET',
      data: { page, size, sortType }
    })
  },
  
  /**
   * 获取商品详情
   * @param {number} id 商品ID
   * @returns {Promise} 商品详情数据
   */
  getProductDetail(id) {
    return request({
      url: `/product/${id}`,
      method: 'GET'
    })
  },
  
  /**
   * 获取推荐商品
   * @param {Object} params 查询参数
   * @param {number} params.page 页码
   * @param {number} params.size 每页大小
   * @returns {Promise} 推荐商品列表
   */
  getRecommendProducts(params = {}) {
    const { page = 0, size = 10 } = params
    return request({
      url: '/product/recommend',
      method: 'GET',
      data: { page, size }
    })
  },
  
  /**
   * 获取热销商品
   * @param {Object} params 查询参数
   * @param {number} params.page 页码
   * @param {number} params.size 每页大小
   * @returns {Promise} 热销商品列表
   */
  getHotProducts(params = {}) {
    const { page = 0, size = 10 } = params
    return request({
      url: '/product/hot',
      method: 'GET',
      data: { page, size }
    })
  },
  
  /**
   * 搜索商品
   * @param {Object} params 搜索参数
   * @param {string} params.keyword 搜索关键词
   * @param {number} params.page 页码
   * @param {number} params.size 每页大小
   * @returns {Promise} 搜索结果
   */
  searchProducts(params = {}) {
    const { keyword, page = 0, size = 10 } = params
    return request({
      url: '/product/search',
      method: 'GET',
      data: { keyword, page, size }
    })
  },
  
  /**
   * 检查商品库存
   * @param {number} productId 商品ID
   * @param {number} quantity 需要的数量
   * @returns {Promise} 库存检查结果
   */
  checkStock(productId, quantity) {
    return request({
      url: `/product/${productId}/stock/check`,
      method: 'GET',
      data: { quantity },
      showLoading: false
    })
  }
}

/**
 * 通用工具函数
 */
export const apiUtils = {
  /**
   * 格式化价格显示
   * @param {number} price 价格
   * @returns {string} 格式化后的价格
   */
  formatPrice(price) {
    return parseFloat(price).toFixed(2)
  },
  
  /**
   * 格式化销量显示
   * @param {number} sales 销量
   * @returns {string} 格式化后的销量
   */
  formatSales(sales) {
    if (sales >= 10000) {
      return (sales / 10000).toFixed(1) + '万'
    }
    return sales.toString()
  },
  
  /**
   * 处理图片URL
   * @param {string|Array} images 图片URL或URL数组
   * @returns {string|Array} 处理后的图片URL
   */
  processImageUrl(images) {
    if (Array.isArray(images)) {
      return images.map(url => url || '/static/placeholder.png')
    }
    return images || '/static/placeholder.png'
  }
}

export default {
  productApi,
  apiUtils
}